#pragma once

//快速排序

#pragma once
#include "vector"
#include "iostream"
template <typename ElemType>
void printVec(std::vector<ElemType> &vec)
{
    for (auto &i : vec)
    {
        std::cout << i << ",";
    }
    std::cout << "\r\n";
}
int getDisOfABC(int A, int B, int C)
{
    return abs(A - B) + abs(B - C) + abs(A - C);
}
bool checkAMin(int A, int B, int C)
{
    if (A <= B && A <= C)
    {
        return true;
    }
    return false;
}

template <typename ElemType>
bool quickSort(
    std::vector<ElemType> &vec1, int beginIndex, int endIndex)
{
    if (endIndex <= beginIndex)
    {
        return true;
    }
    int left = beginIndex;
    int right = endIndex;
    auto pivot = vec1[left];
    bool onRight = true;
    while (left != right)
    {
        if (onRight)
        {
            if (vec1[right] >= pivot)
            {
                right--;
            }
            else
            {
                vec1[left] = vec1[right];
                onRight = false;
            }
        }
        else
        {
            if (vec1[left] <= pivot)
            {
                left++;
            }
            else
            {
                vec1[right] = vec1[left];
                onRight = true;
            }
        }
    }
    quickSort(vec1, beginIndex, left - 1);
    quickSort(vec1, left + 1, endIndex);
    vec1[left] = pivot;
    return true;
    // return false;
}

template <typename ElemType>
bool quickSortStart(
    std::vector<ElemType> &vec1)
{
    quickSort(vec1, 0, vec1.size() - 1);
    return true;
    // return false;
}
int main()
{
    std::cout << "hello \r\n";
    int arrA[] = {7, 0, 9, 4, 8, 5, 6, 2, 1, 3};
    int arrB[] = {-25, -10, 10, 11};
    int arrC[] = {2, 9, 17, 30, 41};
    // std::vector<int> A =
    //     std::vector<int> B =
    std::vector<int> A(arrA, arrA + sizeof(arrA) / sizeof(int));
    // std::vector<int> B(arrB, arrB + sizeof(arrB) / sizeof(int));
    // std::vector<int> C(arrC, arrC + sizeof(arrC) / sizeof(int));

    printVec(A);
    // printVec(B);
    // printVec(C);
    quickSortStart(A);
    printVec(A);
    // std::vector<int> vec1; // vec2, vec3;
    // int arr[100];
    // std::cout << "hello"
    //           << "\r\n";
    // //init data
    // for (int i = 0; i < 100; i++)
    // {
    //     arr[i] = i;
    // }
    // leftMoveArr(arr, 100, 30);

    // // fastFind(vec1, 9);
    // for (int i = 0; i < 100; i++)
    // {
    //     std::cout << arr[i] << ",";
    // }
    // std::cout << "\r\n";
    // for (int i = 0; i < vec2.size(); i++)
    // {
    //     std::cout << vec2[i] << ",";
    // }
    // std::cout << "\r\n";
    // ///////////////////////////////////////////////////
    // combineAB2C(vec1, vec2, vec3);
    // for (int i = 0; i < vec3.size(); i++)
    // {
    //     std::cout << vec3[i] << ",";
    // }
    // std::cout << "\r\n";
    return 0;
}